Ich habe ein Problem mit dem SQL Server festgestellt. Dies ist die Funktion, die ich erstellt habe:
ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS @trackingItems1 TABLE (
item nvarchar NULL,
warehouse nvarchar NULL,
price int NULL
)
AS
BEGIN
INSERT INTO @trackingItems1(item, warehouse, price)
SELECT ta.item, ta.warehouse, ta.price
FROM stock ta
WHERE ta.price >= @price;
RETURN;
END;
Wenn ich eine Abfrage schreibe, um diese Funktion wie die folgende zu verwenden, wird der Fehler angezeigt
String oder Binärdaten würden abgeschnitten werden. Die Anweisung wurde beendet
Wie kann ich dieses Problem beheben?
select * from testing1(2)
So erstelle ich die Tabelle
CREATE TABLE stock(item nvarchar(50) NULL,
warehouse nvarchar(50) NULL,
price int NULL);
sql
sql-server
user2098512
quelle
quelle
Antworten:
Wenn Sie
varchar
etc ohne Länge definieren, ist der Standardwert 1.Wenn Sie also 400 Bytes in der
@trackingItems1
Spalte erwartenstock
, verwenden Sienvarchar(400)
.Andernfalls versuchen Sie,> 1 Zeichen einzufügen
nvarchar(1)
= failAls Kommentar ist dies auch eine schlechte Verwendung der Tabellenwertfunktion, da es sich um eine "Mehrfachanweisung" handelt. Es kann so geschrieben werden und es wird besser laufen
ALTER FUNCTION [dbo].[testing1](@price int) RETURNS AS SELECT ta.item, ta.warehouse, ta.price FROM stock ta WHERE ta.price >= @price;
Natürlich können Sie auch eine normale SELECT-Anweisung verwenden.
quelle
Die maximale Länge der Zielspalte ist kürzer als der Wert, den Sie einfügen möchten.
Klicken Sie mit der rechten Maustaste auf die Tabelle in SQL Manager und gehen Sie zu 'Design', um Ihre Tabellenstruktur und Spaltendefinitionen anzuzeigen.
Bearbeiten:
Versuchen Sie, für Ihre nvarchar-Einfügungen eine Länge festzulegen, die gleich oder kürzer ist als die in Ihrer Tabelle definierten.
quelle
nvarchar(50)
zuntext
in SQL Server das Problem löst, Hoffnung hilft jemandemnvarchar(2083)
ist der beste Spaltentyp für eine URL von hier , danke.In meinem Fall bekam ich diesen Fehler, weil mein Tisch hatte
aber ich habe eine 67 Zeichen lange Zeichenfolge eingefügt, was zu diesem Fehler führte. Ändern in
Das Problem wurde behoben.
quelle
Geben Sie eine Größe für den Artikel und das Lager an, wie in [dbo]. [Testing1] FUNCTION
@trackingItems1 TABLE ( item nvarchar(25) NULL, -- 25 OR equal size of your item column warehouse nvarchar(25) NULL, -- same as above price int NULL )
Da in MSSQL nur nvarchar gleich nvarchar (1) ist, werden die Werte der Spalte aus der Bestandsliste abgeschnitten
quelle
SQL Server 2016 SP2 CU6 und SQL Server 2017 CU12 haben das Ablaufverfolgungsflag 460 eingeführt, um die Details der Kürzungswarnungen zurückzugeben. Sie können es auf Abfrageebene oder auf Serverebene aktivieren.
Abfrageebene
INSERT INTO dbo.TEST (ColumnTest) VALUES (‘Test truncation warnings’) OPTION (QUERYTRACEON 460); GO
Serverebene
Ab SQL Server 2019 können Sie es auf Datenbankebene aktivieren:
ALTER DATABASE SCOPED CONFIGURATION SET VERBOSE_TRUNCATION_WARNINGS = ON;
Die alte Ausgabenachricht lautet:
Die neue Ausgabenachricht lautet:
In einer zukünftigen Version von SQL Server 2019 ersetzt die Nachricht 2628 standardmäßig die Nachricht 8152.
quelle