ไม่สามารถรันสคริปต์: หน่วยความจำไม่เพียงพอที่จะดำเนินการโปรแกรมต่อไป


88

ฉันมีไฟล์ sql ขนาด 123MB ซึ่งฉันต้องใช้งานในเครื่องพีซีของฉัน แต่ฉันกำลังได้รับ

Cannot execute script: Insufficient memory to continue the execution of the program

ใส่คำอธิบายภาพที่นี่

วิธีแก้ปัญหานี้?


@marc_s เมื่อฉันคลิก Ctlr + E มันแสดงข้อผิดพลาดนี้ทันที
user960567

คำตอบ:


126

ใช้เครื่องมือบรรทัดคำสั่ง SQLCMD ซึ่งใช้หน่วยความจำน้อยกว่ามาก มันง่ายเหมือน:

SQLCMD -d <database-name> -i filename.sql

คุณต้องมีข้อมูลประจำตัวที่ถูกต้องเพื่อเข้าถึงอินสแตนซ์ SQL Server ของคุณหรือแม้กระทั่งเพื่อเข้าถึงฐานข้อมูล

นำมาจากที่นี่ .


26
ด้วยข้อมูลประจำตัวแบบเต็มระบุฐานข้อมูลและเซิร์ฟเวอร์: sqlcmd -S <YOUR-SERVER> -U <YOUR-USER> -P <YOUR-PASSWORD> -d <YOUR-DATABASE> -i <YOUR-SQL-FILE-PATH.sql >
a4bike

1
ฉันได้รับปัญหานี้: "จำนวนนิพจน์ค่าแถวในคำสั่ง INSERT เกินจำนวนสูงสุดที่อนุญาต 1,000 ค่าแถว"
Christian Fredh

3
เพิ่ม-eสำหรับการเชื่อมต่อที่เชื่อถือได้
smurtagh

33

มันอาจช่วยคุณได้! โปรดดูขั้นตอนด้านล่าง

sqlcmd -S ชื่อเซิร์ฟเวอร์ -d ฐานข้อมูลชื่อ -i script.sql

  • เปิด cmd.exe ในฐานะผู้ดูแลระบบ
  • สร้างไดเร็กทอรี Documents
  • ใส่ไฟล์สคริปต์ SQL ของคุณ (script.sql) ในโฟลเดอร์เอกสาร
  • พิมพ์คำค้นหาด้วย sqlcmd ชื่อเซิร์ฟเวอร์ชื่อฐานข้อมูลและชื่อไฟล์สคริปต์เหมือนข้อความค้นหาที่ไฮไลต์ด้านบนหรือใต้หน้าจอบรรทัดคำสั่ง

ใส่คำอธิบายภาพที่นี่


คุณสามารถ Aad ชื่อผู้ใช้ -sa และรหัสผ่าน -123, sqlcmd -S viaserver -U sa -P 123 -d TelstraDeployed -i SQLQuery1.sql
Anil Singh

มันทำให้ฉันมีข้อผิดพลาด Sqlcmd: ข้อผิดพลาด: Mircorsoft SQL Server Native Client 10.0: ไคลเอนต์ไม่สามารถสร้างการเชื่อมต่อเนื่องจากความล้มเหลวในการเข้าสู่ระบบล่วงหน้า
gbbosmiya

11

คุณยังสามารถเพิ่มหน่วยความจำขั้นต่ำต่อค่าแบบสอบถามในคุณสมบัติของเซิร์ฟเวอร์ได้ หากต้องการแก้ไขการตั้งค่านี้ให้คลิกขวาที่ชื่อเซิร์ฟเวอร์และเลือกคุณสมบัติ> แท็บหน่วยความจำ

ฉันพบข้อผิดพลาดนี้ขณะพยายามเรียกใช้สคริปต์ 30MB SQL ใน SSMS 2012 หลังจากเพิ่มค่าจาก 1024MB เป็น 2048MB ฉันสามารถเรียกใช้สคริปต์ได้

(นี่คือคำตอบเดียวกับที่ฉันให้ไว้ที่นี่ )


10

สำหรับ Windows Authentication ให้ใช้ sql cmd นี้

SQLCMD -S TestSQLServer\SQLEXPRESS  -d AdventureWorks2018 -i "d:\document\sql document\script.sql"

หมายเหตุ:หากมีที่ว่างในเส้นทางไฟล์ sql ให้ใช้ "(เครื่องหมายคำพูด)"

สำหรับ SQL Server Authentication ให้ใช้ sql cmd นี้

SQLCMD -S TestSQLServer\SQLEXPRESS -U sa -P sasa  -d AdventureWorks2018 -i "d:\document\sql document\script.sql"

-S TestSQLServer \ SQLEXPRESS: ที่นี่ระบุชื่อเซิร์ฟเวอร์ SQL

-U sa:ชื่อผู้ใช้ (ในกรณีของการตรวจสอบสิทธิ์เซิร์ฟเวอร์ SQL)

-P sasa:รหัสผ่าน (ในกรณีของการตรวจสอบสิทธิ์เซิร์ฟเวอร์ SQL)

-d AdventureWorks2018:ชื่อฐานข้อมูลมาที่นี่

-i "d: \ document \ sql document \ script.sql":เส้นทางไฟล์ของ SQLFile


5

ถ้าฉันเข้าใจปัญหาของคุณอย่างถูกต้องคุณกำลังพยายามกู้คืน (ทรานแซค sql) xyz.sql - database + schema คุณสามารถลองใช้คำสั่งนี้ซึ่งเหมาะกับฉัน:

SQLCMD -U sa -i xyz.sql

4

ฐานข้อมูลของฉันมีขนาดใหญ่กว่า 500mb ฉันจึงใช้สิ่งต่อไปนี้

C:\Windows>sqlcmd -S SERVERNAME -U USERNAME -P PASSWORD -d DATABASE -i C:\FILE.sql

โหลดทุกอย่างรวมถึง SP

* หมายเหตุ: เรียกใช้ cmd ในฐานะผู้ดูแลระบบ


2

บางครั้งเนื่องจากสคริปต์และข้อมูลมีขนาดใหญ่เราจึงพบข้อผิดพลาดประเภทนี้ เซิร์ฟเวอร์ต้องการหน่วยความจำเพียงพอในการดำเนินการและให้ผลลัพธ์ เราสามารถเพิ่มขนาดหน่วยความจำต่อแบบสอบถาม

คุณต้องไปที่คุณสมบัติเซิร์ฟเวอร์ sql> แท็บหน่วยความจำ (ด้านซ้าย)> ตั้งค่าขีด จำกัด หน่วยความจำสูงสุดที่คุณต้องการเพิ่ม

นอกจากนี้ยังมีตัวเลือกที่ด้านบนคือ "ผลลัพธ์เป็นข้อความ" ซึ่งใช้หน่วยความจำน้อยกว่าเมื่อเปรียบเทียบกับตัวเลือก "ผลลัพธ์เป็นตาราง" เรายังสามารถไปที่ผลลัพธ์เป็นข้อความเพื่อการประมวลผลหน่วยความจำน้อยลง


2

ลองทำตามขั้นตอนนี้

1) เปิด PowerShell

2) เขียนคำสั่งนี้:

sqlcmd -S PCNAME\SQLEXPRESS -U user -P password -d databanse_name -i C:\script.sql

3) กด Return

:-)

ใส่คำอธิบายภาพที่นี่


2

สคริปต์ด้านล่างทำงานได้อย่างสมบูรณ์:

sqlcmd -s Server_name -d Database_name -E -i c:\Temp\Recovery_script.sql -x

อาการ:

เมื่อเรียกใช้สคริปต์การกู้คืนด้วยยูทิลิตี้ sqlcmd 'Sqlcmd: Error: Syntax error ที่บรรทัด XYZ ใกล้คำสั่ง' X 'ในไฟล์' file_name.sql ' พบข้อผิดพลาด

สาเหตุ:

นี่คือข้อ จำกัด ยูทิลิตี้ sqlcmd หากสคริปต์ SQL มีเครื่องหมายดอลลาร์ ($) ในรูปแบบใด ๆ ยูทิลิตี้จะไม่สามารถเรียกใช้สคริปต์ได้อย่างถูกต้องเนื่องจากจะแทนที่ตัวแปรทั้งหมดโดยอัตโนมัติตามค่าเริ่มต้น

ความละเอียด:

ในการดำเนินการสคริปต์ที่มีเครื่องหมายดอลลาร์ ($) ในรูปแบบใด ๆ จำเป็นต้องเพิ่มพารามิเตอร์“ -x” ในบรรทัดคำสั่ง

เช่น

ต้นฉบับ: sqlcmd -s Server_name -d Database_name -E -ic: \ Temp \ Recovery_script.sql

คงที่: sqlcmd -s Server_name -d Database_name -E -ic: \ Temp \ Recovery_script.sql -x


$ comment มีประโยชน์มาก ขอบคุณ
Pale Ale

1

sqlcmd -S mamxxxxxmu \ sqlserverr -U sa -P x1123 -d QLDB -i D: \ qldbscript.sql

  • เปิดพรอมต์คำสั่งในการทำงานในฐานะผู้ดูแลระบบ

  • ป้อนคำสั่งด้านบน

"mamxxxxxmu" คือชื่อคอมพิวเตอร์ "sqlserverr" คือชื่อเซิร์ฟเวอร์ "sa" คือชื่อผู้ใช้ของเซิร์ฟเวอร์ "x1123" คือรหัสผ่านของเซิร์ฟเวอร์ "QLDB" คือชื่อฐานข้อมูล "D: \ qldbscript.sql" เป็นไฟล์สคริปต์ sql เพื่อดำเนินการในฐานข้อมูล


1

หากคุณต้องการเชื่อมต่อกับ LocalDB ระหว่างการพัฒนาคุณสามารถใช้:

sqlcmd -S "(localdb)\MSSQLLocalDB" -d dbname -i file.sql
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.